"""
KidsBuddy 1.0 系统配置
包含所有全局配置参数和设置
"""

import os
import json
from typing import Dict, Tuple, Any, Optional
from pathlib import Path

# 项目根目录
ROOT_DIR = Path(__file__).parent.parent.parent

# 日志配置
LOG_DIR = ROOT_DIR / "logs"
LOG_LEVEL = "INFO"
LOG_ROTATION = "1 day"
LOG_RETENTION = "30 days"

# 硬件配置
HARDWARE_CONFIG = {
    "camera_device_id": 0,
    "microphone_device_id": None,
    "environment_sensors_enabled": False,
    "light_control_enabled": False,
}

# 监督阈值配置
ALERT_THRESHOLDS = {
    'posture_score_min': 60,        # 坐姿评分最低阈值
    'environment_score_min': 60,    # 环境评分最低阈值
    'max_interference_duration': 300  # 最大干扰时长（秒）
}

# 环境参数配置
ENVIRONMENT_CONFIG = {
    'optimal_light_range': (40, 80),     # 最佳光线范围
    'max_noise_level': 30,               # 最大噪音阈值
    'optimal_temp_range': (20, 26),      # 最佳温度范围
    'optimal_humidity_range': (40, 60),  # 最佳湿度范围
}

# 循环间隔配置（秒）
LOOP_INTERVALS = {
    'main_loop': 0.1,      # 100ms - 主监督循环
    'posture_loop': 0.1,   # 100ms - 坐姿检测循环
    'environment_loop': 5.0,  # 5s - 环境监测循环
    'person_loop': 2.0,    # 2s - 人员检测循环
    'data_record': 30.0,   # 30s - 数据记录循环
}

# AI模型配置
AI_MODELS = {
    'posture_detection': {
        'model_type': 'mediapipe',
        'confidence_threshold': 0.6,
    },
    'person_detection': {
        'model_type': 'yolov8',
        'model_path': str(ROOT_DIR / 'models' / 'yolov8n.pt'),
        'confidence_threshold': 0.5,
    }
}

# 数据存储配置
DATA_STORAGE = {
    'db_path': str(ROOT_DIR / 'data' / 'kidsbuddy.db'),
    'history_limit': 3600,  # 保存最近一小时的数据点
}

# 用户配置（可在运行时覆盖）
class UserConfig:
    """用户配置类，支持从文件加载和保存"""
    
    def __init__(self):
        self.config_path = ROOT_DIR / 'config' / 'user_config.json'
        self.config = {
            'student_id': 'student_001',
            'session_auto_save': True,
            'alert_sound_enabled': True,
            'camera_preview': True,
        }
        self._load_config()
    
    def _load_config(self):
        """从文件加载配置"""
        if self.config_path.exists():
            try:
                with open(self.config_path, 'r', encoding='utf-8') as f:
                    loaded_config = json.load(f)
                    self.config.update(loaded_config)
            except Exception as e:
                print(f"加载用户配置出错: {e}")
    
    def save_config(self):
        """保存配置到文件"""
        os.makedirs(self.config_path.parent, exist_ok=True)
        with open(self.config_path, 'w', encoding='utf-8') as f:
            json.dump(self.config, f, indent=4, ensure_ascii=False)
    
    def get(self, key: str, default: Any = None) -> Any:
        """获取配置项"""
        return self.config.get(key, default)
    
    def set(self, key: str, value: Any):
        """设置配置项"""
        self.config[key] = value


# 创建全局用户配置实例
user_config = UserConfig()